package com.gite.nouette.admin.implementation.controller;

import java.util.List;

import com.gite.nouette.admin.contract.controller.ICContainerModule;
import com.gite.nouette.admin.contract.controller.ICModule;
import com.gite.nouette.admin.contract.model.IContainerModule;
import com.gite.nouette.admin.contract.model.IModule;
import com.gite.nouette.admin.contract.model.IPair;
import com.gite.nouette.admin.contract.view.IVContainerModule;

public class CContainerModuleImpl extends
		AbstractController<IVContainerModule, IContainerModule> implements
		ICContainerModule {

	@Override
	public void addColumn(int index) {
		getM().addColumn(index);
		getV().addColumn(index);
	}

	@Override
	public List<IModule> removeColumn(int index) {
		List<IModule> removed = getM().removeColumn(index);
		getV().removeColumn(index);

		return removed;
	}

	@Override
	public int getNbColumn() {
		return getM().getNbColumn();
	}

	@Override
	public int getNextIndexColumn() {
		return getM().getNextIndexColumn();
	}

	@Override
	public IPair<Integer, Integer> addModule(IModule module) {
		return addCModule((ICModule<?, ?>) module);
	}

	@Override
	public int addModule(IModule module, int colNum) {
		return addCModule((ICModule<?, ?>) module, colNum);
	}

	@Override
	public void addModule(IModule module, int colNum, int rowNum) {
		addCModule((ICModule<?, ?>) module, colNum, rowNum);
	}

	@Override
	public boolean removeModule(IModule module) {
		return removeCModule((ICModule<?, ?>) module);
	}

	@Override
	public int getNbModule() {
		return getM().getNbModule();
	}

	@Override
	public IPair<Integer, Integer> addCModule(ICModule<?, ?> cModule) {
		IPair<Integer, Integer> coordinates = getM().addModule(cModule);
		getV().addModule(cModule.getV(), coordinates.getX(), coordinates.getY());

		return coordinates;
	}

	@Override
	public int addCModule(ICModule<?, ?> cModule, int colNum) {
		int rowNum = getM().addModule(cModule, colNum);
		getV().addModule(cModule.getV(), colNum, rowNum);

		return rowNum;
	}

	@Override
	public void addCModule(ICModule<?, ?> cModule, int colNum, int rowNum) {
		getM().addModule(cModule, colNum, rowNum);
		getV().addModule(cModule.getV(), colNum, rowNum);
	}

	@Override
	public boolean removeCModule(ICModule<?, ?> CModule) {
		boolean removed = true;
		removed &= getM().removeModule(CModule);
		removed &= getV().removeModule(CModule.getV());

		return removed;
	}
}
